package com.itheima.common;


import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.RestControllerAdvice;

import java.sql.SQLIntegrityConstraintViolationException;

//全局异常处理类
@Slf4j
//层层上抛 ， 直接对  RestController和  Controller 上抛
@RestControllerAdvice(annotations = {RestController.class, Controller.class})
public class GlobalExceptionHandler {

    //处理的异常
    @ExceptionHandler(SQLIntegrityConstraintViolationException.class)
    public R handleException(SQLIntegrityConstraintViolationException constraintViolationException) {
        //打印日志
        log.error(constraintViolationException.getMessage());
        //拿到异常处理的内容 什么账号已存在？？？
        String message = constraintViolationException.getMessage();
        //如果包含唯一约束，如果是，获取异常信息中的用户名，返回错误提示信息
        if (message.contains("Duplicate entry")) {
            //拿到用户名
            String username = message.split(" ")[2].replace("'", " ");
            return R.error(username + "已存在");
        }
        //如果不是，返回数据异常信息
        return R.error("数据存在异常，请稍后重试！");
    }

    //处理自定义异常
    @ExceptionHandler(CustomException.class)
    public R handlerCustomException(CustomException customException) {
        //打印日志
        log.error(customException.getMessage());
        //返回异常信息
        return R.error(customException.getMessage());
    }
}
